package routes

import (
	"net/http"
	"sdc/api"
	"sdc/middleware"

	"github.com/gin-gonic/gin"
)

func NewRouter() *gin.Engine {
	r := gin.Default()

	// 全局中间件
	r.Use(middleware.Cors())      // 跨域
	r.Use(middleware.RequestID()) // 请求ID
	r.Use(middleware.Logger())    // 日志
	r.Use(middleware.Recovery())  // 恢复

	// 健康检查
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})

	// API v1 分组
	v1 := r.Group("/api/v1")
	{
		// 公开接口
		public := v1.Group("")
		{
			// 用户相关
			public.POST("/register", api.Register) // 注册
			public.POST("/login", api.Login)       // 登录

			// 项目相关
			public.GET("/projects", api.ListProjects)   // 项目列表
			public.GET("/projects/:id", api.GetProject) // 项目详情
			//获取项目动态
			public.GET("/projects/:id/updates", api.ListProjectUpdates) // 项目动态
			//获取分类
			public.GET("/categories", api.ListCategories) // 分类列表

		}

		// 需要认证的接口
		auth := v1.Group("").Use(middleware.JWT())
		{
			// 用户相关
			auth.GET("/user/info", api.GetUserInfo)    // 用户信息
			auth.PUT("/user/info", api.UpdateUserInfo) // 更新信息
			//自行接上百度的人脸识别sdk
			// auth.POST("/user/verify", api.SubmitVerification) // 实名认证

			// 项目相关
			auth.POST("/projects", api.CreateProject)                // 创建项目
			auth.PUT("/projects/:id", api.UpdateProject)             // 更新项目
			auth.POST("/projects/:id/update", api.AddProjectUpdate)  // 项目动态
			auth.POST("/projects/:id/documents", api.UploadDocument) // 上传材料

			// 捐款相关

			// auth.POST("/donations", api.CreateDonation)    // 创建捐款
			// auth.GET("/donations/my", api.ListMyDonations) // 我的捐款
			// auth.GET("/donations/:id", api.GetDonation)    // 捐款详情

			// 收藏相关

			auth.POST("/favorites", api.AddFavorite)          // 添加收藏
			auth.DELETE("/favorites/:id", api.RemoveFavorite) // 取消收藏
			auth.GET("/favorites", api.ListFavorites)         // 收藏列表

		}

		// 管理员接口
		admin := v1.Group("/admin").Use(middleware.Admin())
		{
			// 用户管理
			admin.GET("/users", api.ListUsers) // 用户列表

			// 项目管理
			admin.GET("/projects/audit", api.ListAuditProjects) // 待审核项目
			admin.POST("/projects/:id/audit", api.AuditProject) // 审核项目

			// 系统管理
			admin.POST("/categories", api.CreateCategory)       // 创建分类
			admin.PUT("/categories/:id", api.UpdateCategory)    // 更新分类
			admin.DELETE("/categories/:id", api.DeleteCategory) // 删除分类
			admin.GET("/categories", api.ListCategories)        // 分类列表
		}
	}

	return r
}
